package uiMain;

import gestorbienraizok.usuarios.Persona;
import java.util.Scanner;
import static uiMain.bienRaizOk.entrada;

public class OpcionAgregarOpcion extends OpcionDeMenu {

    private String nombreParaMostrar = " Agregar opciones de menú a un usuario";

    @Override
    public void ejecutar() {

        System.out.print("Ingrese la cédula del usuario al que le desea agregar una opción: ");
        entrada = new Scanner(System.in);
        long cedulaEstaPersona = entrada.nextLong();
        Persona estaPersona = Persona.buscarPersona(cedulaEstaPersona);
        while (estaPersona == null) {
            System.out.print("No se encontró ninguna persona con cédula " + cedulaEstaPersona + ", intente nuevamente: ");
            cedulaEstaPersona = entrada.nextLong();
            estaPersona = Persona.buscarPersona(cedulaEstaPersona);
        }

        MenuDeConsola menuDeReferencia = new MenuDeConsola(estaPersona.getNivelDeAcceso());
        MenuDeConsola menuAModificar = estaPersona.getMenuDeConsola();

        for (int i = 0; i < menuAModificar.getNumeroDeOpciones() - 2; i++) {
            OpcionDeMenu opcionActual = menuAModificar.getListaDeOpciones().get(i);
            for (int j = 0; j < menuDeReferencia.getNumeroDeOpciones() - 2; j++) {
                if (menuDeReferencia.getListaDeOpciones().get(j).toString().equals(opcionActual.toString())) {
                    menuDeReferencia.getListaDeOpciones().remove(j);
                    break;
                }
            }
        }
        //El menu de referencia queda solo con las opciones que el usuario actual no tiene

        if (menuDeReferencia.getNumeroDeOpciones() - 2 != 0) {
            System.out.print("Las siguientes opciones pueden ser agregadas al menú del " + estaPersona.tipoDePersona() + " " + estaPersona.getNombre() + ":\n\n");
            menuDeReferencia.mostrarMenuSinCerrarSesionYSalir();
            System.out.print("\nSeleccione la opción que desea agregarle: ");
            byte seleccion = entrada.nextByte();
            while (seleccion < 1 || seleccion > menuDeReferencia.getNumeroDeOpciones() - 2) {
                System.out.print("Seleccione una opción válida (1-" + (menuDeReferencia.getNumeroDeOpciones() - 2) + "): ");
                entrada = new Scanner(System.in);
                seleccion = entrada.nextByte();
            }
            OpcionDeMenu opcionAAgregar = menuDeReferencia.getListaDeOpciones().get(seleccion - 1);
            menuAModificar.agregarOpcion(opcionAAgregar);

            System.out.println("La opción se agregó de manera exitosa");

        } else {
            System.out.println("No es posible agregarle ninguna opción al " + estaPersona.tipoDePersona() + " " + estaPersona.getNombre() + ". No hay más para agregar");
        }

    }

    @Override
    public String toString() {
        return nombreParaMostrar;
    }

    @Override
    public String toStringParaMostrarElNivel() {
        return nombreParaMostrar.trim().concat("...................................................................").substring(0,67) + "Administrador del sistema";
    }

}
